/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db_interaction;

import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Neves
 */
@Entity
@Table(name = "comentario")
public class Comentario implements Serializable {

    @Id
    @GeneratedValue
    private int Comentario_id;
    @Basic
    @Column(name = "Comentario_Utilizador_id")
    private int Comentario_Utilizador_id;
    @Basic
    @Column(name = "Comentario_descricao")
    private String Comentario_descricao;
    @Basic
    @Column(name = "Comentario_activo")
    private boolean Comentario_activo;

    //GETS
    public int GETComentatio_id() {
        return this.Comentario_id;
    }

    public int GETComentatio_Utilizador_id() {
        return this.Comentario_Utilizador_id;
    }

    public String GETComentatio_descricao() {
        return this.Comentario_descricao;
    }

    public boolean GETComentatio_activo() {
        return this.Comentario_activo;
    }

    //SETS
    public void SETComentatio_id(int Comentario_id) {
        this.Comentario_id = Comentario_id;
    }

    public void SETComentatio_Utilizador_id(int Comentario_Utilizador_id) {
        this.Comentario_Utilizador_id = Comentario_Utilizador_id;
    }

    public void SETComentatio_descricao(String Comentario_descricao) {
        this.Comentario_descricao = Comentario_descricao;
    }

    public void SETComentatio_activo(boolean Comentario_activo) {
        this.Comentario_activo = Comentario_activo;
    }

    //DB access
    public int insertEntity(Comentario Comment) {
        //returns 1 if successfull
        //return -1 if error
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.save(Comment);
            s.getTransaction().commit();
            System.out.println("Inserido");
            return 1;
        } catch (Exception e) {
            return -1;
        }
    }

    public Comentario SelectEntity(Comentario Comment) {
        Comentario comm = null;

        //returns sellected friend if successfull
        //return null
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            comm = (Comentario) s.load(Comentario.class, Comment.GETComentatio_id());
            s.getTransaction().commit();
            return comm;

        } catch (Exception e) {
            return comm;
        }
    }

    public int UpdateEntity(Comentario comm) {
        //returns 1 if successfull
        //return -1 if error
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.save(comm);
            s.getTransaction().commit();
            return 1;

        } catch (Exception e) {
            return -1;
        }
    }

    public Boolean InsertComment(String email_user_login, String comentario_desc, int id_publicacao) {

        List<Utilizador> users = null;
        Comentario com = new Comentario();
        Publicacao_Comentario pub_com = new Publicacao_Comentario();
        int id_user_comment, id_comentario;

        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.beginTransaction();

            // Query para devolver o ID do utilizador
            Query q = s.createQuery("from Utilizador where Utilizador_email like'%" + email_user_login + "%'");
            users = q.list();
            id_user_comment = users.get(0).getid();

            com.SETComentatio_Utilizador_id(id_user_comment);
            com.SETComentatio_descricao(comentario_desc);
            com.SETComentatio_activo(true);

            // Inserir na tabela "Comentario" ja com o ID do utilizador que fez o comentario
            s.save(com);
            id_comentario = com.GETComentatio_id();

            s.getTransaction().commit();

            // Inserir na tabela "Publicacao_comentario" para associar o ID do comentario à publicacao

            s.beginTransaction();

            pub_com.SETPublicacao_Comentario_Publicacao_id(id_publicacao);
            pub_com.SETPublicacao_Comentario_Comentario_id(id_comentario);
            pub_com.SETPublicacao_Comentario_activo(true);

            s.save(pub_com);

            s.getTransaction().commit();

            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
